#ifndef ERROR_H
#define ERROR_H

#ifdef __cplusplus
extern "C" {
#endif

#include "public.h"

/**
 * @brief 错误记录最大数量
 */
#define ERROR_MAX_NUM 32

/**
 * @brief 错误标志类型
 */
typedef enum {
    ERROR_FALSE = 0,
    ERROR_TRUE  = 1
} error_flag_t;

/**
 * @brief 错误记录结构体
 */
typedef struct {
    error_flag_t enable;   ///< 是否有效
    uint16_t     err_id;   ///< 错误ID
    uint16_t     err_para; ///< 错误参数
} error_record_t;

/**
 * @brief 初始化错误记录
 * @return 0成功，-1失败
 */
int error_init(void);

/**
 * @brief 软复位（可根据实际需求扩展）
 * @return 0成功，-1失败
 */
int error_reset(void);

/**
 * @brief 分析并清除所有错误，输出到 buf，每条4字节，高字节在前
 * @param buf 输出缓冲区
 * @param pnum 输出错误条数
 * @return 0成功，-1失败
 */
int error_analyze(uint8_t *buf, uint16_t *pnum);

/**
 * @brief 标记新错误（去重）
 * @param err_id 错误ID
 * @param err_para 错误参数
 * @return 0成功，-1失败
 */
int error_mark(uint16_t err_id, uint16_t err_para);

/**
 * @brief 是否有任何错误
 * @return 1有错误，0无错误
 */
int error_has_error(void);

/**
 * @brief 检查指定错误是否存在
 * @param err_id 错误ID
 * @return 1存在，0不存在
 */
int error_check(uint16_t err_id);

/**
 * @brief 清除指定错误
 * @param err_id 错误ID
 * @return 0成功，-1失败
 */
int error_clear(uint16_t err_id);

#ifdef __cplusplus
}
#endif

#endif // ERROR_H